package com.ytc.system.controller;

import com.ytc.commons.enums.ErrorCode;
import com.ytc.commons.model.dto.ApproveDto;
import com.ytc.commons.model.dto.CompanyDto;
import com.ytc.commons.model.dto.PageRequest;
import com.ytc.commons.model.vo.CompanyVo;
import com.ytc.commons.model.vo.ResponseResult;
import com.ytc.commons.utils.BeanHelper;
import com.ytc.commons.utils.JwtUtils;
import com.ytc.system.domain.Company;
import com.ytc.system.service.CompanyService;
import com.ytc.web.exception.BusinessException;
import com.ytc.web.interceptor.AuthInfoHolder;
import io.jsonwebtoken.Claims;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/company")
public class CompanyController {

    @Autowired
    private CompanyService companyService;


    //因为前端是请求头携带token，而token中有（企业id信息）
    // 。我们在登陆的时候返回给前端的token就携带信息
    //所以获取token并解析得到想要的信息  企业id
    @GetMapping("/mine")
    public ResponseResult<CompanyVo> mine(/*@RequestHeader("Authorization") String token*/){

        //从线程获取，当前用户信息（Threadlocal）
        Long companyId = AuthInfoHolder.getCompanyId();


       /*
        //1.校验token是否合法，不合法抛异常
        Boolean b = JwtUtils.verifyToken(token);
        if(!b){
            throw new BusinessException(ErrorCode.ERROR);
        }
        //2.解析token 获取companyid (claims==Map集合)
        Claims claims = JwtUtils.parserToken(token).getBody();
        Long companyId = claims.get("companyId",Long.class);*/
        //3.根据id 得到company的信息

       Company company = companyService.getById(companyId);

        //4.返回
        //这个BeanHelper.copy方法可以把所有的company实体类字段 装到companyVo实体类中，避免了我们一个一个的set
        CompanyVo companyVo = BeanHelper.copyProperties(company,CompanyVo.class);

        return ResponseResult.okResult(companyVo);
    }
    //查询企业集合
    @PostMapping("/list")
    public ResponseResult listCompany(PageRequest request, @RequestBody CompanyDto dto){

        return companyService.listCompany(request,dto);
    }

    //入驻机构表添加
    @PostMapping
    public ResponseResult company(@RequestBody CompanyDto companyDto){
        companyService.savedto(companyDto);
        return ResponseResult.okResult(true);
    }


    //根据id查询机构信息
    @GetMapping("/{id}")
    public ResponseResult<Company> findCompanyById(@PathVariable("id")String id){
        return companyService.findCompanyById(id);
    }
    //机构审核
    @PostMapping("/approve")
    public ResponseResult approve(@RequestBody ApproveDto approveDto){
        companyService.savecompany(approveDto);
        return ResponseResult.okResult(true);
    }
}
